package com.infodms.dms.actions.claim.auditing.rule.custom.elment;

import org.apache.log4j.Logger;

import com.infodms.dms.actions.claim.auditing.ClaimOrderVO;
import com.infodms.dms.common.Constant;

/**
 * 授权项抽象类
 * 注:新增授权项步骤
 *    1、在TC_CODE增加新授权项信息
 *    2、创建授权项对应取值了（需要继承AbstractElement）
 *    3、在AbstractElement工厂方法（getElement）中加入取得该授权项实例代码
 * @author XZM
 */
public abstract class AbstractElement {
	
	private static Logger logger = Logger.getLogger(AbstractElement.class);
	/** 
	 * 取的对应授权项需要校验的数据
	 * @return Object
	 */
	protected abstract Object getElementValue(ClaimOrderVO orderVO);
	
	/**
	 * 处理取值
	 * @param orderVO
	 * @return
	 */
	public Object getPackElementValue(ClaimOrderVO orderVO){
		Object obj = this.getElementValue(orderVO);
		
		if(obj==null)
			obj = "";
		
		return obj;
	}
	
	/**
	 * 取的授权项对应值
	 * @param elementCode TC_CODE中维护的授权项代码
	 * @return AbstractElement
	 */
	public final static AbstractElement getElement(String elementCode){
		
		AbstractElement resElement = null;
		
		Integer eCode = Integer.parseInt(elementCode);
		
		if(Constant.CLAIM_AUTH_TYPE_01.equals(eCode)){//维修操作代码
			resElement = new Element01();
		}else if(Constant.CLAIM_AUTH_TYPE_02.equals(eCode)){//零件金额
			resElement = new Element02();
		}else if(Constant.CLAIM_AUTH_TYPE_03.equals(eCode)){//维修总金额
			resElement = new Element03();
		}else if(Constant.CLAIM_AUTH_TYPE_04.equals(eCode)){//其它项目费用
			resElement = new Element04();
		}else if(Constant.CLAIM_AUTH_TYPE_05.equals(eCode)){//修理完工天数
			resElement = new Element05();
		}else if(Constant.CLAIM_AUTH_TYPE_06.equals(eCode)){//索赔类型
			resElement = new Element06();
		}else if(Constant.CLAIM_AUTH_TYPE_07.equals(eCode)){//索赔申请次数
			resElement = new Element07();
		}else if(Constant.CLAIM_AUTH_TYPE_08.equals(eCode)){//修理完上报期限（天）
			resElement = new Element08();
		}else if(Constant.CLAIM_AUTH_TYPE_09.equals(eCode)){//是否特殊质保车辆
			resElement = new Element09();
		}else if(Constant.CLAIM_AUTH_TYPE_10.equals(eCode)){//经销商代码 
			resElement = new Element10();
		}else if(Constant.CLAIM_AUTH_TYPE_11.equals(eCode)){//车型代码
			resElement = new Element11();
		}else if(Constant.CLAIM_AUTH_TYPE_12.equals(eCode)){//产地
			resElement = new Element12();
		} else if(Constant.CLAIM_AUTH_TYPE_13.equals(eCode)){//经销商星级
			resElement = new Element13();
		} else if(Constant.CLAIM_AUTH_TYPE_14.equals(eCode)){//车行大类
			resElement = new Element14();
		} else {//没有对应类型
			logger.error(">>>>>>>>>>>>>[该类型授权项没有维护]>>>>>>>>>>>>");
		}
		
		return resElement;
	}
}
